// evcp/document-list-only/page.tsx - 전체 계약 대상 문서 목록 import * as React from "react" import { Suspense } from "react" import { Skeleton } from "@/components/ui/skeleton" import { type SearchParams } from "@/types/table" import { getValidFilters } from "@/lib/data-table" import { DocumentStagesTable } from "@/lib/vendor-document-list/plant/document-stages-table" import { documentStageSearchParamsCache } from "@/lib/vendor-document-list/plant/document-stage-validations" import { getDocumentStagesOnly } from "@/lib/vendor-document-list/plant/document-stages-service" interface IndexPageProps { searchParams: Promise } // 문서 테이블 래퍼 컴포넌트 (전체 계약용) async function DocumentTableWrapper({ searchParams }: { searchParams: SearchParams }) { const search = documentStageSearchParamsCache.parse(searchParams) const validFilters = getValidFilters(search.filters) // 필터 타입 변환 const convertedFilters = validFilters.map(filter => ({ id: (filter.id || filter.rowId) as string, value: filter.value, operator: (filter.operator === 'iLike' ? 'ilike' : filter.operator === 'notILike' ? 'notin' : filter.operator === 'isEmpty' ? 'eq' : filter.operator === 'isNotEmpty' ? 'ne' : filter.operator === 'isBetween' ? 'eq' : filter.operator === 'isRelativeToToday' ? 'eq' : filter.operator || 'eq') as 'eq' | 'in' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte' | 'like' | 'ilike' | 'notin' })) // evcp: 전체 계약 대상으로 문서 조회 const documentsPromise = getDocumentStagesOnly({ ...search, filters: convertedFilters, }, -1) // 세션에서 자동으로 도메인 감지 return ( ) } function TableLoadingSkeleton() { return (
{Array.from({ length: 5 }).map((_, i) => (
))}
) } // 메인 페이지 컴포넌트 export default async function DocumentStagesManagementPage({ searchParams }: IndexPageProps) { const resolvedSearchParams = await searchParams return (
{/* 문서 테이블 */} }>
) }